package common;

import java.io.*;

/**
 * 文件操作工具类，主要提供：
 * 1.writeFile：将内容写入本地文件中
 * 2.readFile：读取给定路径的文件，返回所有内容
 */
public class FileUtil {

    /**
     * 读取文件内容，主要用于获取以下文件内容：
     * 1.编译java文件出错时记录的错误信息文件
     * 2.运行class文件出错时记录的错误信息文件
     * 3.运行class文件成功时记录的文件
     * @param filePath
     * @return
     */
    public static String readFile(String filePath) {
        // 拼接文件内容的字符串
        StringBuilder result = new StringBuilder();
        // 创建一个文件字符输入流来读取文件
        try (FileReader fileReader = new FileReader(filePath)) {
            // 循环读
            while (true) {
                // 读取一个字符
                int ch = fileReader.read();
                // 如果结束，退出循环
                if (ch == -1) {
                    break;
                }
                // 拼接到字符串结果中
                result.append((char)ch);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 返回拼接结果
        return result.toString();
    }

    /**
     * 上传的代码，进行拼接测试代码后，最终内容需要保存在本地java文件中
     * @param filePath  保存的文件路径
     * @param content   文件内容
     */
    public static void writeFile(String filePath, String content) {
        // 创建文件字符输出流来写数据
        try (FileWriter fileWriter = new FileWriter(filePath)) {
            // 输出给定的内容到文件中
            fileWriter.write(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 单元测试：可以用于本地验证代码
     * @param args
     */
    public static void main(String[] args) {
        // 先写入本地一个文件
        FileUtil.writeFile("d:/test.txt", "hello");
        // 在读取这个文件内容
        String content = FileUtil.readFile("d:/test.txt");
        System.out.println(content);
    }
}
